package cn.bdqn.petadoptions.comment;

/**
 * @ProjectName: Petadoptions
 * @Package: cn.bdqn.petadoptions.comment.result
 * @ClassName: Result
 * @Author: haha  86130
 * @Description:
 * @Date: 2021/8/25 10:33
 * @Version: 1.0
 */
public class Result<T> {

    /**
     * 状态码
     */
    private String status;
    /**
     * 状态信息,错误描述.
     */
    private String message;
    /**
     * 数据.
     */
    private T data;

    /*构造方法*/
    private Result(String message) {
        this.message = message;
    }

    private Result(String status, String message) {
        this.status = status;
        this.message = message;
    }

    private Result(String status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    /*get/set*/
    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    /**
     * 创建一个带有状态的结果对象.
     * @param status 状态
     * @return 结构数据
     */
    public static <T> Result<T> buildResult(Status status) {
        return new Result<T>(status.getCode(), status.getReason());
    }

    /**
     * 创建一个带有状态、消息和消息内容
     * @param status 状态
     * @param message 消息内容
     * @return 结构数据
     */
    public static <T> Result<T> buildResult(Status status, String message) {
        return new Result<T>(status.getCode(), message);
    }

    /**
     * 创建一个带有状态和数据的结果对象.
     * @param status 状态
     * @param data 数据
     * @return 结构数据
     */
    public static <T> Result<T> buildResult(Status status, T data) {
        return new Result<T>(status.getCode(), status.getReason(), data);
    }
    /**
     * 创建一个带有状态、消息和数据的结果对象.
     * @param status 状态
     * @param message 消息内容
     * @param data 数据
     * @return 结构数据
     */
    public static <T> Result<T> buildResult(Status status, String message, T data) {
        return new Result<T>(status.getCode(), message, data);
    }

}
